 /*-----------------------------------------------File Info------------------------------------------------
** File Name:               osHardware.h  
** Last modified date:      2016.09.8
** Last version:            V0.1
** Description:             OS相关配置,以及OS所用到的变量别名     
**
**--------------------------------------------------------------------------------------------------------            
** Created date:            2016.09.8
** author:                  YLY
** Version:                 V0.1
** Descriptions:             事件创建/事件调度 实现 
**--------------------------------------------------------------------------------------------------------*/
#ifndef _OS_HARDWARE_H_
#define _OS_HARDWARE_H_

/*************************************************************
* 	include 
* 	头文件	
*************************************************************/ 
#include "osConfig.h" 
#include "osTypedef.h"

/* 临界段 */
#define DISABLE_IRQ()  	__disable_irq()
#define ENABLE_IRQ()  	__enable_irq()
extern uint16_t criticalNesting;

#define	ENTER_CRITICAL()	DISABLE_IRQ(); criticalNesting++;		/* 进入临界 */
#define EXIT_CRITICAL()		if(--criticalNesting == 0){ENABLE_IRQ();}	/* 退出临界 */

/* TICK为向下计数器 */

/* 系统定时器中断向量 */
#define SYSTEM_TIME_ISR  SysTick_Handler
 
/* 系统定时器控制寄存器 */
#define SYSTICK_CTRL		( ( volatile uint32_t *) 0xe000e010 )
	
/* 系统定时器重载值 */
#define SYSTICK_LOAD		( ( volatile uint32_t *) 0xe000e014 )

/* 系统定时器值 */
#define SYSTICK_VAL			( ( volatile uint32_t *) 0xe000e018 )
	
/* 当前值寄存器 */
#define SYSTICK_CALIR		( ( volatile uint32_t *) 0xe000e01C )
	
/* 中断状态控制寄存器 */
#define SYSINT_CTRL			( ( volatile uint32_t *) 0xe000ed04 )
	
#define SYSTICK_CLK_BIT			0x00000004	/* 使用内核时钟作为TICK时钟源 */
#define SYSTICK_INT_BIT			0x00000002	/* 使能TICK中断 */
#define SYSTICK_ENABLE_BIT		0x00000001	/* 使能TICK */

/* 中断优先级设置 */
#define SYSPRI2			    ( ( volatile uint32_t *) 0xe000ed20 )
	
/* 时钟频率,注意是TICK时钟源的频率,非OSC频率 */
#define SYS_CLOCK_HZ    	( unsigned long ) SystemCoreClock	//rcu_clock_freq_get(CK_SYS)	
	
	
/* 系统定时器频率（Hz）最小为1Hz,最大不超过1000Hz,推荐频率100Hz~1000Hz*/
#ifndef TICK_RATE_HZ
	#define TICK_RATE_HZ   		1000u
#endif

/* 系统定时器运行周期us */
#define TICK_CYCLICITY_US 	(1000000u / TICK_RATE_HZ)	

/* 1秒的时间TICK中断次数,用于重置看门狗 */
#define SEC_COUNT		TICK_RATE_HZ

/* WDT */
#define SYS_WDT_CTL			( ( volatile uint32_t *)  0x40040000 )
#define SYS_WDT_ALCTL		( ( volatile uint32_t *)  0x40040004 )
#define SYS_WDT_RSTCNT		( ( volatile uint32_t *)  0x40040008 )


#define	SYS_WDT_EN			( 1 << 7 )
#define	SYS_WDT_RSTEN		( 1 << 1 )
#define	SYS_WDT_WKEN		( 1 << 4 )

#define	SYS_WDT_RST			0x00005AA5

#define SYS_WDT_TOUTSEL_POS 	(8) 



/* lockReg */
#define SYS_UNLOCK_REG()	SYS_UnlockReg()
#define SYS_LOCK_REG()		SYS_LockReg()



extern bool gClrWdt;

extern void wdtInit(void);
extern void clrWdt(void);

#define OS_CLR_WDT()	if(gClrWdt==true){gClrWdt=false;clrWdt();/*OS_DEBUF_PRINTF("vClrWdt\r\n");*/}
extern void sysTickInit(void);
	

/* sytTick是一个递减就寄存器，从SYSTICK_LOAD减到0，重装 */
extern uint32_t getSysTickVal(void);
extern uint32_t getSysTickLoad(void);





#endif /* _OS_HARDWARE_H_ */



